<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <button>点击</button>
    <script>
    var that;
    var _that;
    class Star {
        constructor(uname, age) {
            // constructor 里面的 this 指向的是 创建的实例对象
            that = this;
            console.log(this);
            this.uname = uname;
            this.age = age;
            // this.sing();
            this.btn = document.querySelector('button');
            // 这里 this.sing 不加()，否则会立即执行
            this.btn.onclick = this.sing;
        }
        sing() {
            // 这个 sing 方法里面的 this 指向的是 btn 这个按钮，因为这个按钮调用了这个函数
            console.log(this)
            console.log(that.uname);  // that 里面存储的是 constructor 里面的 this(声明一个全局变量存放 this 实例)
        }
        dance() {
            // 这个 dance 里面的 this 指向的是实例对象 ldh，因为 ldh 调用了这个函数
            _that = this;
            console.log(this);
        }
    }

    var ldh = new Star('刘德华', 18);
    console.log(that === ldh);
    ldh.dance();
    console.log(_that === ldh);

    // 1.在 ES 6 中类没有变量提升，所以必须先定义类，才能通过类实例化对象
    // 2.类里面的共有的属性和方法一定要加 this 使用
    </script>
</body>
</html>